这个问题在这里已经有了答案:IsJavaScriptapass-by-referenceorpass-by-valuelanguage?(33个答案)关闭8年前。假设我有一个内联脚本标签,它的代码非常简单,如下所示(function(){vartest="Thisisasimpletest";functionmodifyTest(s){s="Modifiedtesttext";};modifyTest(test);console.log(test)//Willstilldisplay"Thisisasimpletest"})();但是如果我使用test=modifyTest(test)
我正在对这个恶意JavaScript行进行一些试验:varundefined=true;JavaScript中每个未初始化的变量都有undefined的值,这只是一个保存特殊值'undefined'的变量,所以下面应该执行警报:varundefined=true,x;if(x){alert('ok');}但事实并非如此,我的问题是为什么?在进一步的实验中,我尝试了以下方法:varundefined=true,x=undefined;if(x){alert('ok');}这一次,alert被执行。所以我的问题是...因为在第一个片段中x包含undefined(因为它没有被初始化),为什么
我在函数中使用以下代码:setTimeout("doSomething(var1)",10000);但是,我还有var1可用作全局变量。10000毫秒后,它会调用本地var1还是全局var1? 最佳答案 这个:setTimeout('doSomething(var1)',10000);将传递全局变量var1,还有这个:setTimeout(function(){doSomething(var1);},10000);将传递局部变量var1。现场演示:http://jsfiddle.net/simevidas/EQMaz/
以下是Chrome开发者控制台的一些代码和输出案例1:varmyarr=document.location.hostname.split(".");//typedundefined//outputmyarr[0]//typed"ptamz"//output:ONE案例2:varname=document.location.hostname.split(".");//typedundefined//outputname[0]//typed"p"//output:TWO为什么两个输出(注释Output:ONE和Output:TWO)不同?截图: 最佳答案
每当我在浏览器上看到一个网站时,一个javascript实例正在运行。我可以在控制台(DevTools)中声明一个全局变量;vara=1234567890;此变量已在全局范围内声明,这样我就可以像这样获取变量的值;>a1234567890不过,我也可以这样做;>window.a1234567890我是否正确理解window对象是包含浏览器网站实例中所有全局变量的对象?如果是这样,窗口对象属于什么范围?这让我有点困惑;>windowWindow{top:Window,window:Window,location:Location,external:,...}>window.windowW
这是一个简单的片段,我只是不明白。下面的代码输出12,我明白了,因为varfoo=12;替换了之前的变量声明。varfoo=1;functionbar(){if(!foo){varfoo=12;}alert(foo);}bar();在下面的代码中,它警告1,这意味着在函数外部声明的变量在函数内部是可以访问的。varfoo=1;functionbar(){alert(foo);}bar();但是,在下面的代码中,为什么会提示undefined?我想,它会提醒1,我只是将之前声明的变量分配给新变量。varfoo=1;functionbar(){if(!foo){varfoo=foo;}al
在Javascript中,我们不必在使用变量之前使用var关键字声明它。我们可以立即执行myCount=12;或myStr="Hello";(之前未声明myCount、myStr)。任何此类用法都在“全局”范围内声明和初始化变量。提供此功能的原因可能是什么?这是一个好的标准吗?更新:我的问题不是“在不声明的情况下使用变量”和“先声明然后使用”之间的区别是什么,以及它如何影响范围。我的问题是“为什么在javascript中允许直接使用变量而不声明它”,因为大多数编程语言对此都有严格的检查。更新:我认为以下引用的文字是此功能的不良影响。那么,为什么要有这个功能呢?“假设有一个全局声明的变量
我使用了这段代码(后面跟着一个填充“tcap”文本区域的xmlhttprequest):st=setTimeout(checkme(),4000)checkme()是:functioncheckme(){if(typeof(st)!='undefined')clearTimeout(st)if(document.getElementById("tcap").innerHTML.length>0){document.getElementById('waitmsg').style.display='none'}else{st=setTimeout(checkme(),1000)}}如果我运
我今天看到这样的东西varVisualizer=(function(){functionVisualizer(){//...}Visualizer.prototype.function1=function(){/*...*/}//...returnVisualizer;})();varviz=newVisualizer();我不明白这样做与仅仅摆脱iife包装器相比有何意义。 最佳答案 您在此处展示的特定构造没有意义。在这种类型的构造中使用IIFE的原因是当您有需要声明的静态数据时,希望对您的对象可用,但不希望它可公开访问或干扰全局
是否可以使用单个变量传递多个参数?例如,如果我想做类似的事情:functionfoo(x,y){document.write("Xis"+x);document.write("Yis"+y);}varbar="0,10";foo(bar);上面的例子是我试图做的一个简化例子。它不起作用(因为“bar”被检测为单个参数)。我知道有更简单的方法可以使用数组来实现这一点。所以,我问这个问题主要是出于好奇-是否有可能将“bar”变量检测为不是一个参数,而是2个参数?谢谢! 最佳答案 functionfoo(thing){document.w